import Vue from 'vue'
import VueRouter from 'vue-router'

import Home from '@/pages/Home'
import Login from '@/pages/Login'
import Register from '@/pages/Register'
import Search from '@/pages/Search'
import Test from '@/pages/Test'

Vue.use(VueRouter)

// 二次封装 push 和 replace 解决编程式导航 路径重复提交时的promise报错
// push 和 replace 调用，返回的值是一个 promise

const oldPush = VueRouter.prototype.push
const oldReplace = VueRouter.prototype.replace

VueRouter.prototype.push = function(options,resolve,reject){
    if(!resolve && !reject){ // 没有传回调时执行
        return oldPush.call(this,options).catch(()=>{})
    }else{ // 传了 1 个或者 2 个回调 时执行
        return oldPush.call(this,options,resolve,reject)
    }
}

VueRouter.prototype.replace = function(options,resolve,reject){
    if(!resolve && !reject){
        return oldReplace.call(this,options).catch(()=>{})
    }else{
        return oldReplace.call(this,options,resolve,reject)
    }
}


export default new VueRouter({
    routes:[
        {
            path:'/test',
            component:Test
        },
        {
            path:'/home',
            component:Home
        },
        {
            path:'/login',
            component:Login,
            // 设置meta属性，在根组件中用于条件渲染Footer组件
            meta:{
                isHidden:true
            }
        },
        {
            path:'/register',
            component:Register,
            meta:{
                isHidden:true
            }
        },
        {
            path:'/search',
            component:Search,
            name:'search',
            // 直接解构 params 和 query 所有参数，在组件中直接 props：['参数名'] 接收
            props:(route)=>({...route.params,...route.query})
        },
        {
            path:'/',
            redirect:'/home'
        }
    ]
})